ROOT_DIR   := .
SOURCE_DIR := $(ROOT_DIR)/addon
OUTPUT_DIR := $(ROOT_DIR)/out
BACKUP_DIR := $(ROOT_DIR)/backup

# jasmine関係ファイルの保存位置
JSMN_BASE_DIR := $(ROOT_DIR)/jasmine
# jasmineテスト実行時の位置
JSMN_TEST_DIR := $(SOURCE_DIR)/jasmine

# jsdoc関係ファイルのインストール位置
# ホームディレクトリからの指定だと上手くいかないオプション(-t)があるので絶対パスで。
JSDOC_BASE_DIR := /Users/machida/Binary/jsdoc_toolkit-2.4.0/jsdoc-toolkit
JSDOC_OUT_DIR := $(OUTPUT_DIR)/jsdoc

.PHONY: TAGS
TAGS: $(SOURCE_DIR)/*.js
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	ctags --verbose -e --recurse --languages=javascript > $(OUTPUT_DIR)/ctags.log


# 2013/3/30 node-jslintの出力を
# emacsのgrepモード用に修正した。
# /usr/local/lib/node_modules/jslint/lib/reporter.js
.PHONY: jslint
jslint: $(SOURCE_DIR)/*js
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	jslint $(SOURCE_DIR)/*.js $(SOURCE_DIR)/*/*js > $(OUTPUT_DIR)/jslint.log


.PHONY: gjslint
gjslint: $(SOURCE_DIR)/*.js
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	gjslint --nojsdoc --strict -r $(SOURCE_DIR) > $(OUTPUT_DIR)/gjslint.log


.PHONY: validate
validate: jslint gjslint


.PHONY: fixjsstyle
fixjsstyle: $(SOURCE_DIR)/*.js
	@[[ -d $(BACKUP_DIR) ]] || mkdir -p $(BACKUP_DIR)
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	cp $(SOURCE_DIR)/*.js $(BACKUP_DIR)
	fixjsstyle $(SOURCE_DIR)/*.js > $(OUTPUT_DIR)/fixjsstyle.log


.PHONY: rmjasmine
rmjasmine:
	chmod -R +w $(JSMN_TEST_DIR) 2>&1; true
	rm -rf $(JSMN_TEST_DIR) 2>&1; true
	chmod -R +w $(SOURCE_DIR)/isjasmineenable.js 2>&1; true
	rm -f $(SOURCE_DIR)/isjasmineenable.js 2>&1; true
	touch $(SOURCE_DIR)/isjasmineenable.js

.PHONY: jasmine
jasmine: $(SOURCE_DIR)/*.js rmjasmine
	cp -r $(JSMN_BASE_DIR) $(SOURCE_DIR)
	chmod -R -w $(JSMN_TEST_DIR)
	cp $(JSMN_BASE_DIR)/isjasmineenable.js $(SOURCE_DIR)
	chmod -w $(SOURCE_DIR)/isjasmineenable.js

.PHONY: jsdoc
jsdoc: $(SOURCE_DIR)
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	rm -rf $(JSDOC_OUT_DIR)/ 2>&1; true
	java -jar $(JSDOC_BASE_DIR)/jsrun.jar $(JSDOC_BASE_DIR)/app/run.js addon/ -t=$(JSDOC_BASE_DIR)/templates/jsdoc/ -a -r -d=$(JSDOC_OUT_DIR)/
#	open $(JSDOC_OUT_DIR)/index.html

.PHONY: export
export:
	@[[ -d $(OUTPUT_DIR) ]] || mkdir -p $(OUTPUT_DIR)
	svn export $(SOURCE_DIR) exported_addon
	zip -r exported_addon.zip exported_addon
	mv exported_addon.zip $(OUTPUT_DIR)
	rm -rf exported_addon


.PHONY: help
help:
	@echo "  TAGS jslint gjslint validate(jslint+gjslint) fixjsstyle"
	@echo "  jsdoc jasmine export"
	@echo "  clean rmjasmine"
	@echo "  help"


.PHONY: clean
clean: rmjasmine
	rm TAGS 2>&1 2>/dev/null; true
	rm -rf $(OUTPUT_DIR); true

